home *** CD-ROM | disk | FTP | other *** search
/ Visual Basic Graphics Programming (2nd Edition) / Visual Basic Graphics Programming 2nd Edition.iso / OldSrc / CH7 / SRC / REFL_AT.FRM (.txt) < prev    next >
Encoding:
Visual Basic Form  |  1995-11-07  |  3.6 KB  |  129 lines

  1. VERSION 4.00
  2. Begin VB.Form ReflectAcrossForm 
  3.    Caption         =   "Reflect Across"
  4.    ClientHeight    =   4425
  5.    ClientLeft      =   2325
  6.    ClientTop       =   780
  7.    ClientWidth     =   4215
  8.    DrawMode        =   14  'Copy Pen
  9.    Height          =   5115
  10.    Left            =   2265
  11.    LinkTopic       =   "Form1"
  12.    ScaleHeight     =   4425
  13.    ScaleWidth      =   4215
  14.    Top             =   150
  15.    Width           =   4335
  16.    Begin VB.CheckBox CheckReflect 
  17.       Caption         =   "Reflect"
  18.       Height          =   255
  19.       Left            =   1680
  20.       TabIndex        =   1
  21.       Top             =   4080
  22.       Width           =   855
  23.    End
  24.    Begin VB.PictureBox Pict 
  25.       Height          =   3975
  26.       Left            =   0
  27.       ScaleHeight     =   -7
  28.       ScaleLeft       =   -1
  29.       ScaleMode       =   0  'User
  30.       ScaleTop        =   6
  31.       ScaleWidth      =   7
  32.       TabIndex        =   0
  33.       Top             =   0
  34.       Width           =   4215
  35.    End
  36.    Begin VB.Menu mnuFile 
  37.       Caption         =   "&File"
  38.       Begin VB.Menu mnuFileExit 
  39.          Caption         =   "E&xit"
  40.       End
  41.    End
  42. Attribute VB_Name = "ReflectAcrossForm"
  43. Attribute VB_Creatable = False
  44. Attribute VB_Exposed = False
  45. Option Explicit
  46. Dim NumSegments As Integer
  47. Dim Segments() As Segment
  48. Const LineX1 = 0.75
  49. Const LineY1 = -0.5
  50. Const LineX2 = 3.75
  51. Const LineY2 = 5.5
  52. Sub CreateData()
  53.     ' Create the axes.
  54.     MakeSegment 0, 0, 5, 0
  55.     MakeSegment 0, 0, 0, 5
  56.     ' Create the line of reflection.
  57.     MakeSegment LineX1, LineY1, LineX2, LineY2
  58.     ' Create an object to manipulate.
  59.     MakeSegment 1, 3, 2, 3
  60.     MakeSegment 2, 3, 2, 4
  61.     MakeSegment 2, 4, 1, 4
  62.     MakeSegment 1, 4, 1, 3
  63.     MakeSegment 1, 3, 2, 4
  64.     MakeSegment 2, 3, 1, 4
  65. End Sub
  66. Sub DrawSegments(pic As Object)
  67. Dim dx As Single
  68. Dim dy As Single
  69. Dim M(1 To 3, 1 To 3) As Single
  70. Dim i As Integer
  71. Dim x1 As Single
  72. Dim y1 As Single
  73. Dim x2 As Single
  74. Dim y2 As Single
  75.     pic.Cls
  76.     ' Transform the data.
  77.     If CheckReflect.Value = vbChecked Then
  78.         dx = LineX2 - LineX1
  79.         dy = LineY2 - LineY1
  80.         m2ReflectAcross M, LineX1, LineY1, dx, dy
  81.     Else
  82.         m2Identity M
  83.     End If
  84.     TransformPicture M
  85.     For i = 1 To NumSegments
  86.         x1 = Segments(i).fr_tr(1)
  87.         y1 = Segments(i).fr_tr(2)
  88.         x2 = Segments(i).to_tr(1)
  89.         y2 = Segments(i).to_tr(2)
  90.         pic.Line (x1, y1)-(x2, y2)
  91.     Next i
  92. End Sub
  93. Private Sub CheckReflect_Click()
  94.     Pict.Refresh
  95. End Sub
  96. Private Sub Form_Load()
  97.     CreateData
  98. End Sub
  99. Sub MakeSegment(x1 As Single, y1 As Single, x2 As Single, y2 As Single)
  100.     NumSegments = NumSegments + 1
  101.     ReDim Preserve Segments(1 To NumSegments)
  102.     Segments(NumSegments).fr_pt(1) = x1
  103.     Segments(NumSegments).fr_pt(2) = y1
  104.     Segments(NumSegments).fr_pt(3) = 1
  105.     Segments(NumSegments).to_pt(1) = x2
  106.     Segments(NumSegments).to_pt(2) = y2
  107.     Segments(NumSegments).to_pt(3) = 1
  108. End Sub
  109. ' ***********************************************
  110. ' Transform all segments except the axes.
  111. ' ***********************************************
  112. Sub TransformPicture(M() As Single)
  113. Dim i As Integer
  114.     For i = 1 To 2
  115.         m2PointCopy Segments(i).fr_tr, Segments(i).fr_pt
  116.         m2PointCopy Segments(i).to_tr, Segments(i).to_pt
  117.     Next i
  118.     For i = 3 To NumSegments
  119.         m2Apply Segments(i).fr_pt, M, Segments(i).fr_tr
  120.         m2Apply Segments(i).to_pt, M, Segments(i).to_tr
  121.     Next i
  122. End Sub
  123. Private Sub mnuFileExit_Click()
  124.     Unload Me
  125. End Sub
  126. Private Sub Pict_Paint()
  127.     DrawSegments Pict
  128. End Sub
  129.